Communication apparatus and method for performing vision testing on deaf and severely hearing-impaired individuals

ABSTRACT

An apparatus and method for communicating to a deaf or severely hearing impaired individual while vision testing utilizing indicator lights (52A), (52B), (52C), and (52D) positioned in the same plane as a visual acuity test chart (54) having optotypes (50B). The examiner activates the indicator lights by means such as an infra-red remote control receiver (56). This is done in a manner previously disclosed to the examinee permitting the examinee to understand messages from the examiner, while the examiner simultaneously operates a refractor to determine the refractive state of the examinee.

BACKGROUND

1. Field of Invention

This invention relates to vision testing deaf or severely hearing-impaired individuals, specifically to the means by which the examiner communicates the necessary instructions to the hearing impaired individual during the course of the examination.

2. Description of Prior Art

The usual means of communicating to deaf and hearing-impaired individuals are through the printed word, sign language, finger spelling, lip reading, gestures or by touch. Except for touch, the hearing-impaired individual must be able to observe the one attempting the communication. Other means of non-verbal communication for the handicapped have been developed. U.S. Pat. No. 4,406,998 to Willough, Sep. 27, 1983 discloses a device which allows communication through lighted message blocks. Many devices have been developed which allow communication from a handicapped person to another, such as the apparatus disclosed in U.S. Pat. No. 3,651,512 to Summers, Mar. 21, 1972.

A vision examination consists of many parts. Typically, an eye examination will include the patient case history, visual acuity testing, various eye health tests, muscle balance tests, objective refraction and subjective refraction. Visual acuity testing is accomplished using various types of visual acuity test targets and displays. A test distance between the patient and the test targets is typically twenty feet. Visual acuity test targets are known as optotypes. One such optotype is disclosed in U.S. Pat. No. 4,968,131 to Lewis, Nov. 6, 1990. Historically these test targets were presented to the patient as a wall chart having the optotypes imprinted on it. Currently, the most common method of presenting the optotypes to the patient is through the use of a chart projector which projects the optotypes upon a reflective screen. To permit adequate visualization of the projected acuity chart, the room is generally made dark. Alternative methods of displaying visual acuity charts have been developed. One such device is a translucent panel with imprinted optotypes which is rear-illuminated as disclosed in U.S. Pat. No. 5,129,720 to Jovicevic, Jul. 14, 1992. Another method employs a computer to generate optotypes upon a video display unit as disclosed in U.S. Pat. No. 4,239,351 to Williams, et al, Dec. 16, 1980. Testing of visual acuity and the use of optotypes is integral to the vision examination and is measured repeatedly during the subjective testing phase of the examination.

For most of the examination, the examiner is face-to-face with the patient. The examiner may communicate to a hearing-impaired patient during the case history and eye health tests with relative ease. This can be accomplished through printed material, lip reading or, if the examiner is so skilled, sign language or finger spelling. Alternatively, the examiner may use a sign language interpreter who must also be within the patient's view. It is when a deaf patient is positioned behind a refractor that difficulty arises in performing the vision examination.

A refractor is an optical device containing many lenses through which the patient looks at a visual acuity display. A refractor is also known as a phoropter. The lenses of a refractor may be selected to be presented to the patient individually or in combination. Besides lenses for determining the patient's refractive state, there are various lenses and devices for measuring the patient's extra-ocular muscle balance. Also, wheels and mechanisms for moving the lenses. In order to contain all of the necessary lenses, refractors are not small. Newer types of automated refractors are even larger as they must contain added machinery and electrical components to automatically position the lens combinations in front of the patient. A refractor covers at least the upper half of a patient's face, and extends several inches to either side of the face. It is very difficult for a patient to look around or to the side of a refractor. Often, a patient's head movement is further restricted by a headrest on the examination chair. The refractor has a very restricted field of view through the lens apertures. Little else besides the acuity chart is visible to the patient. As the room is generally dark, this further impedes the patient's ability to visualize anything besides the acuity chart. Once positioned behind a refractor, the hearing-impaired patient has been effectively cut off from further visual communication from the examiner or the interpreter.

Typically, to perform a subjective refraction, the examiner presents to the patient various sets of lens combinations through the refractor. The patient is asked to choose which lens combination out of a set of choices gives the better focus. Using that information, the examiner presents another set of choices. Usually, the initial choices will show a distinct difference between them. As the examination progresses and the examiner is closer to determining the patient's glasses prescription, the difference between the choices becomes more subtle. Often, unless alerted through another clue, a patient may be unable to recognize that a different lens combination has been presented.

During this subjective refraction process, the examiner needs to find out how well the patient is seeing through a particular lens combination. The patient is asked to read the letters on the acuity chart. If the patient can read the letters of a particular size, the examination can then continue with letters of a smaller size. This process continues until the examiner is satisfied that no other lens combination will allow the patient to read smaller letters.

From this discussion, it is apparent that the examiner must communicate to the patient. The examiner must be able to indicate that the patient is about to be shown a set of lens choices. Then the examiner must be able to label each choice (e.g. choice one or choice two). This label must be able to be maintained through several presentations of the same set of choices to allow the patient a more thorough evaluation of each choice. The examiner needs to be able to indicate that a different set of choices is about to be presented to repeat the cycle. Finally, the examiner needs to be able to demand a response from the patient--either to make a choice of the presentations or to read aloud the letters presented.

Currently, there are not any satisfactory means for communicating with the hearing-impaired individual during a subjective refraction. Those methods now employed by vision examiners are as follows:

a) The examiner may position the patient behind the refractor, and by waving his or her hand in front of the fine of sight of the patient, attempt communication. This method is unsatisfactory for several reasons. The communication becomes ambiguous and confusing. The examiner may not flag the examinee in exactly the same way each time so the patient can easily become confused and unsure of the given signal. The examiner's hand may momentarily obscure the view of the visual acuity chart which also is distracting and confusing to the patient. Also, the patient may change focus from the acuity chart, which is set at a particular test distance, to the examiner's hand which would only be a very short distance in front of the patient. This change of focus with the need to then refocus to the distance of the acuity chart may cause inaccurate results in the measurement of the patient's refractive state.

b) The examiner may not perform a subjective refraction at all. Instead, the examiner may only use the information from the objective refraction to prescribe the vision correction. Objective refraction is a method whereby the examiner uses various means to measure the patient's refractive state without feedback from the patient. Retinoscopy and automated refractors are examples of objective refraction. Even the most sophisticated objective refraction technique is not, at present, as accurate a method of determining a patient's refractive state as subjective refraction. In some instances, objective refraction is completely inaccurate and must be entirely disregarded, as shown through the patient's responses in a subjective refraction. Elimination of the subjective refraction is a very poor answer to the communication hardships presented by deaf and hearing-impaired individuals.

c) Another solution used by examiners is to not use a refractor but to use a special glasses frame (known as a trial frame) that allows the insertion of loose trial lenses by hand. Since this special frame allows the free movement of the patient's head and the field of view is less restricted, the examiner can remain within the patient's view. However, this trial frame method is very time consuming. The frame must be continually removed from the patient's face and the loose lenses changed by hand. It is difficult to quickly present alternative choices. Special refractive procedures such as a Jackson crossed cylinder test become difficult and less accurate when using a trial frame versus a refractor. Using a trial frame is time-consuming, cumbersome, and less accurate.

d) Lastly, a means of communicating to a hearing-impaired patient while using a refractor is through touch. The patient's knee or shoulder can be touched by the examiner to indicate different choices, or to indicate the need for a response. This method is unsatisfactory as it requires the examiner to come into physical contact with the patient. Many individuals feel uncomfortable with forced physical contact. To some extent, such touching undermines the dignity of the individual. It could even provide an opportunity for inappropriate touching of the patient by the examiner. Also, only a very limited amount of information can be transmitted through touch. While this means of communication can and does work, a superior method of visual communication is wanting.

OBJECTS AND ADVANTAGES

Accordingly, the object of this invention is to provide a means of communicating to a deaf individual, or someone with severe hearing loss, while at the same time providing for the display of a visual acuity chart to facilitate vision testing while using a refractor. There are numerous other objects and advantages of the present invention:

a) to provide a means for a vision testing examiner to communicate effectively to a deaf or hearingimpaired individual during testing using a refractor;

b) to provide a means for communication to a deaf or severely-hearing impaired individual who may also be visually impaired and as such, unable to read printed messages that may be displayed at the usual vision test distance of twenty feet;

c) to provide a means for communication to the hearing-impaired which allows subjective refraction to be conducted with a refractor such that the refraction is faster and more accurate for the patient;

d) to provide a means of communication to the hearing-impaired patient which is precise and unambiguous during subjective refraction testing;

e) to provide a means of communicating to a deaf or hearing impaired person while conducting any other vision tests using a refractor such as phoria or vergence muscle balance testing;

f) to provide a means of communicating to a deaf or hearing impaired individual which maintains the focus of the examinee at the proper test distance without requiring change of focus to and from a signaling device.

g) to provide a means of visually communicating to a deaf or hearing impaired individual while conducting a vision test in a darkened room;

h) to provide a means of communication to the deaf or hearing-impaired which maintains their dignity as a person while testing their vision using a refractor;

i) to provide a means of effectively communicating to the deaf and hearing-impaired during subjective refraction testing and other vision tests such that their most important sense of sight is maximized.

Further objects and advantages are to provide to the deaf and hearing-impaired individual a sensation of understanding and capability while having their vision tested, rather than feelings of embarrassment, confusion, doubt, and worry that they are not responding in the way expected by the examiner. Still other objects and advantages will be appreciated through study of the subsequent description and drawings.

SUMMARY

The current invention is an apparatus, and method, for communicating to deaf or severely hearing-impaired individuals comprising: a visual acuity chart combined with indicator lights, which the examiner can activate to transmit messages to the individual whose vision is being examined with the use of a refractor.

BRIEF DESCRIPTION OF THE DRAWINGS AND CODE FIGURES

FIG. 1 is a front view of a typical refractor positioned in front of a patient;

FIG. 2 is a top plan view of a typical examination room showing the present invention in relation to the examination chair, the refractor, and the examiner;

FIG. 3 is a depiction of one embodiment of the present invention wherein the visual acuity chart and the indicator lights are displayed on a computer video display;

FIG. 4 is a block diagram of the system of FIG. 3;

FIG. 5 is a front view representing three alternate embodiments each having identical front appearances;

FIGS. 6A, 6B, and 6C are cross-section views of the three alternate embodiments of the apparatus of FIG. 5 along the line 6--6 of FIG. 5; and

FIG. 7 is a perspective view of a remote control unit for utilization with the apparatus of FIG.5.

CODE (SEE APPENDIX 1)

Illustrative code, written in C programming language is provided as in Appendix 1 hereto.

DETAILED DESCRIPTION

The following description is of four embodiments of the present invention. One embodiment is significantly different in structure from the other three, yet each serve to demonstrate the general concept of the invention. The four embodiments should not be taken as limiting the scope of the invention. Rather, the dimension of the invention should be determined through appreciation of the claims.

Referring to FIG. 1, a typical refractor 12 is positioned as in a clinical testing situation in front of the face of a patient 16. The refractor is mounted on a supporting arm 14. A headrest 26A is positioned behind the patient. The patient looks through apertures 10 of the refractor while the examiner manipulates the various dials and controls of the refractor to position lenses within the apertures. FIG. 2 depicts a usual examination room 20. Situated within the room an examination chair 26 for the patient, a stool 24 for the examiner, and refractor 12 is mounted on supporting arm 14. As is common practice, a mirror 22 is positioned at one end of the room to reflect the image from a computer display 30 through the refractor to the patient seated in chair 26. Such a reflection system allows a smaller size room to provide the necessary test distance of approximately 20 feet. A keyboard 36 is positioned near the examiner and is connected to a computer 34 by means of a cable 28.

FIG. 3 illustrates one embodiment of the invention. It depicts a digital computer 34 attached to a display unit 30 which can display a plurality of optotypes 50A, while at the same time allowing a plurality of individual indicator lights 32A, 32B, 32C, and 32D to be activated singly or in combination. A variety of optotypes and sizes of optotypes are envisioned for the preferred embodiment of the invention. The optotypes shown are for illustrative purposes only.

In the preferred embodiment, the indicator lights are all of one color, having a wavelength approximately in the middle of the visual spectrum, and are positioned to each side, the top, and the bottom of the visual acuity optotype display. The preferred wavelength will produce a yellow-green color. Such an indicator light arrangement would preserve the focus of the examinee to the visual acuity optotypes. Using various colors as indicator lights, or wavelengths at the extremes of the visual spectrum, could have an unwanted effect on the state of accommodative focus of the examinee producing inaccurate refractive error measurements. However, an examiner may have reason to purposefully alter the examinee's state of focus. Also, the positioning of the indicator lights to the sides, top, and bottom shown in the preferred embodiment could easily be arranged in an alternative manner, and more or less in number. Therefore, the preferred embodiment of four single wavelength indicator lights in the middle of the visual spectrum positioned as shown in FIG.3 should not be considered as a limitation of the present invention.

The computer has an input device of a keyboard 36. A typical keyboard has an F9 key 80A, an F1O key 82A, an F11 key 84A, and an F12 key 86A. Keyboards also have an up-arrow key 88A, and a down-arrow key 90A. It should be observed that computers can have numerous methods of inputting control instructions. Other forms of input include, but are not limited to, microphones permitting voice input, mouse pointers, trackballs, light pens, infrared keyboards, et cetera. While this present embodiment uses a keyboard for input, the scope of the invention should not be limited to this input device.

FIG. 4 is a block diagram of the system illustrated in FIG. 3. A central processor with an electronic memory 38 is activated by the digital computer 34. The central processor receives instructions from two programs--a visual acuity chart program 40, and an indicator lights program 42. These programs reside either within the digital computer memory and central processor, or in a storage device such as a diskette or a hard disc 48. Input to the central processor is via a keyboard 36, while the output is to a computer video terminal display 30.

APPENDIX 1 is a listing of programs 40 and 42. The code is written in the C Programming Language. The program may be run on an IBM™ compatible computer having at least a 80386 processor, 4 megabytes of random access memory, a VGA graphics card adapter, a VGA monitor, DOS 5.0™ operating system or above as the operating system, and a Borland™ C compiler or a compatible equivalent. The method of compiling, linking, and executing this source code is conventional and well known to those skilled in the art. This code when executed will produce programs 40 and 42. It should be realized that other programs written in a variety of programming languages and used on different computer configurations can be made to function in a like manner to the source code of APPENDIX 1. Such embodiments are entirely acceptable and wholly equivalent.

FIG. 5 depicts a front view of three alternate embodiments A, B, and C of the present invention. Individual indicator lights 52A, 52,B 52,C and 52D are positioned at the sides, top, and bottom of a visual acuity optotype display 54. They can be singly or in combination activated through an infra-red receiver 56. The indicator lights are positioned in the same plane as the visual acuity optotypes, so that the visual focus of the examinee does not vary when changing their point of regard from the visual acuity chart to the indicator lights. As previously discussed with FIG. 3, the number and plait of the indicator lights can be changed without affecting the principle behind the present invention. The infra-red receiver and its circuitry, and the circuitry from the receiver to the indicator lights are of conventional design. Such design and its implementation are well known and understood by those skilled in the art and need not be described in detail here. The front surface of the visual acuity chart 54 differs for embodiments A, B, and C. In embodiment A, the front surface is a reflective surface to reflect light from a visual acuity chart projector producing a plurality of optotypes 50B. For embodiment B, the front surface is a printable surface upon which are printed optotypes 50B to create the visual acuity chart. Embodiment C uses a translucent material which allows light to pass through it from the rear, except where the optotypes have been imprinted, thus permitting viewing of the acuity chart from the front.

FIGS. 6A, 6B, and 6C are cross sections of FIG. 5 through the line 6--6. FIG. 6A shows a reflective front surface 54A. Many substances can be used to produce the reflective surface such as reflective metal or reflective silver colored paint. Supporting this front service is a backing substrate 60. This backing also can be made out of numerous substances such as plywood or particle board. Indicator lights 52C and 52D have a plastic translucent cover 56 permitting only yellow-green light to pass through from an incandescent light source 58. The side indicator lights which are not shown in these sections are of the same structure as 52C and 52D. As previously discussed, this represents the preferred embodiment for the indicator lights although alternative light arrangements are possible. FIG. 6B differs from FIG.6A only in regard to front surface 54B which is a printable surface such as heavy white paper. Segments of the optotype are seen at 50B. The front surface of FIG. 6C is translucent white plastic with optotype 50C impregnated in the plastic. A plastic housing 60C contains an incandescent light source 62 to produce rear lighting of the translucent front surface. The indicator lights of FIG. 6C are the same as FIG. 6A.

FIG. 7 is a perspective view of an infra-red remote control 70 for selectively activating the indicator lights of FIG. 5. The unit has a removable side 72 to allow for insertion of a conventional battery 74. The battery is connected to the unit via a snap on connector 76. The unit has a set of four buttons for operation 80B, 82B, 84B, and 86B. As with the infra-red receiver unit of FIG. 5, the remote control unit is of conventional design and implementation. This is well known and understood by those skilled in the art and does not need further detail here. Many alternative methods of controlling the indicator lights are possible, such as control wires, radio control, et cetera. The present embodiment of infra-red remote control is preferred for convenience of operation, but should not be regarded as limiting the control method for the present invention.

Operation

Referring to FIG. 7, buttons 80B, 82B, 84B, and 86B activate the indicator lights of FIG. 5 in the following manner. Depressing button 80B causes the left side indicator light to turn on. Pushing button 80B a second time turns off any and all indicator lights which are currently activated. Depressing button 82B turns on the left side light while simultaneously turning off the right side indicator light. Repeated operation of button 82B toggles between activating one of the side lights while simultaneously deactivating the other side light. Button 84B turns the top indicator light on and off Button 86B turns the bottom indicator fight on and off.

To use the invention, the examiner first describes to the deaf or severely hearing impaired patient the messages to be conveyed through the indicator lights. This is done before the patient is positioned behind the refractor and can be explained through printed information, lip reading, signing or any other visual form of communication. Once the patient understands the meaning of the indicator lights, he or she is positioned behind the refractor as in FIG. 1. If the visual acuity optotype chart is as described in FIGS. 6A and 6C, the examiner turns on the acuity chart. The examiner chooses a lens combination of the refractor to place in front of one of the patient's eyes. At this time the examiner depresses button 80B to turn on the left side indicator light. The patient understands from this indicator light that lens combination one is now in place. The examiner next positions lens combination two in front of the patient's eye and simultaneously depresses button 82B. This turns off the left side light and turns on the right side light. The patient understands that lens combination two is now in place. The examiner can switch between the two lens combinations while at the same time depressing button 82B to toggle the indicator lights between choices one and two. After sufficient presentations of the lens combinations, the examiner depresses button 84B which turns on the top indicator light. The patient understands that the examiner is now asking for a choice of which lens combination is better, one or two. To this the patient verbally, or in some manner, indicates which lens choice, one or two, is clearer. The examiner then depresses button 80B again. This turns off all the lights and indicates to the patient that a new set of lens choices is about to be shown. The process is then repeated with the examiner placing another lens combination in front of the eye and depressing button 80B again to turn on the left side light. As needed throughout the examination, the examiner depresses button 86B which activates the lower indicator light. To this light the patient knows to read the line of optotypes to the examiner. The process is continued in the usual manner of determining a patient --s refractive error.

The operation of the embodiment of FIG. 3 is similar to that just described except that keys on the keyboard are used in place of the buttons of FIG. 7. Referring to FIG. 3, 80A toggles on and off left indicator light 32A; 82A toggles on and off right indicator light 32B; 84A toggles on and off bottom indicator light 32C; and 86A toggles on and off top indicator light 32D. Up-arrow key 88A increases the size of optotypes 5OA Down-arrow key 90A decreases the size of the optotypes.

The described method of operation is one of many possible. An examiner can tailor the messages transmitted by the indicator lights to their own needs and preferences in performing a vision examination. The detail of operation is for illustrative purposes and should not limit the scope of the present invention.

Conclusion, Ramifications, and Scope

Accordingly, it is apparent that the present invention provides a useful means of communication from a vision examiner to a deaf or severely hearing-impaired individual while that individual is positioned behind a refractor. A person handicapped by the loss of their sense of hearing must rely heavily on their other senses, especially their most valuable vision sense. It is imperative that this precious sense be maximized to its fullest potential. The present invention provides advantages to the vision examiner so that they may more readily assist the deaf and severely hearing-impaired achieve maximal vision.

While the above description of the four embodiments and the method of operation of the present invention contain many specificities, these should not be construed as limiting in scope. Rather, these specifications should be understood to be illustrative in nature of these particular embodiments of the invention. For example, the indicator lights are shown to be incandescent light fixtures. Many other forms of light arrangements are possible such as light emitting diodes, halogen lights, fiber optic light, flashing lights, et cetera. The examination room arrangement indicates a mirror to provide a smaller room while maintaining a usual test distance of twenty feet. Other optical systems could be employed to achieve an equivalent test distance. The method of controlling the indicator lights of all the present embodiments use depressing buttons. Altenative methods of control could be voice recognition software such that the examiner speaks "one or two" to toggle between indicator lights, or the use of knobs instead of buttons.

Thus, the scope of the invention should be determined by the appended claims and their legal equivalents, rather than by the examples given.

                                      Appendix 1     __________________________________________________________________________                            #define U.sub.-- HALF.sub.-- WD (U.sub.-- WIDTH/2)                            1                            #define U.sub.-- HALF.sub.-- HT (U.sub.-- HEIGHT/2)                            1                            block.sub.-- t top= {320-U.sub.-- HALF.sub.-- WD,                            0,                            U.sub.-- WIDTH U.sub.-- HEIGHT};                            block.sub.-- t bottom = {320 - U.sub.-- HALF.sub.--                             WD, 480-     #include <stdio.h>     U.sub.-- HEIGHT, U.sub.-- WIDTH,                            U.sub.-- HEIGHT};     #include <stdlib.h>    block.sub.-- t left = {0,   240-U.sub.-- HALF.sub.-                            - WD     /*#pragma warn -aus*/  U.sub.-- HEIGHT, U.sub.-- WIDTH};     #include <conio.h>     block.sub.-- t right = {640 - U.sub.-- HEIGHT,                            240-     #include <dos.h>       U.sub.-- HALF.sub.-- WD, U.sub.-- HEIGHT, U.sub.--                            WIDTH},     #include <string.h>     #define BG 0           /* defaults */     #define FG 1           unsigned int width = U.sub.-- WIDTH;     #define U.sub.-- HEIGHT 20                            unsigned int height = U.sub.-- HEIGHT;     #define U.sub.-- WIDTH 50                            unsigned int offset = 0;     typedef unsigned char BYTE;                            unsigned int red = 0/*128*/;     typedef unsigned char huge * u.sub.-- huge;                            unsigned int green = 255;     typedef unsigned char  unsigned int blue = 0;     typedef unsigned short  u.sub.-- short;                            typedef struct {     typedef struct          u.sub.-- huge addr;     {                       unsigned int w;      int x;                 unsigned int h;      int y;                 unsigned int lbytes;      int w;                 unsigned int mode;      int h;                } SCREEN;     } block.sub.-- t;     typedef struct {       SCREEN screen.sub.-- params =      int ht;          /* character height in pixels */                            {(u.sub.-- huge)0xa0000000,640,480,80,0x12};      int wd;          /* character width in pixels */      int x1;               void draw.sub.-- chars( int v);      int x2;               int setbmode( int mode);      int cx;          /* integral center in x direction */      int x3;               #define ESC   0x001B /* ASCII Escape      int x4;               character */      int y1;               #define CHAR.sub.-- q   0x0051 /* ASCII      int y2;               character q */      int cy;          /* integral center in y direction */                            #define CHAR.sub.-- Q  0x0071 /* ASCII      int y3;               character q */      int y4;               #define COLOR.sub.-- INDEX 2      float ut;          /* one basic unit (1/4 width, 1/5                            #define WHITE 0     height) */      int uw;               typedef struct Pal{      int chars;             BYTE red;      int lw;                BYTE green;     } shapes.sub.-- t;      BYTE blue;                            } PAL;     #define VNUM 11     shapes.sub.-- t shapes VNUM!,                            typedef struct {     int Cur = 3;            unsigned char mode;                             unsigned char columns,     float heights  ! = { 6.52, 8.70, 11.00, 13.05, 17.40,                             unsigned char page;     21.75, 26.10, 30.45,   } MODE2;         34.80, 43.50, 87.00 };                            MODE2 mode;                             mov ah, 0fh;     PAL rgb 16!;            int 10h;                             }     int top.sub.-- on(void);     int top.sub.-- off(void);                             columns = .sub.-- AH;     int left.sub.-- on(void);                             mode = .sub.-- AL     int left.sub.-- off(void);                             page = .sub.-- BH     int bottom.sub.-- on(void);                             omode->mode = mode;     int bottom.sub.-- off(void);                             omode->columns = columns;     int right.sub.-- on(void);                             omode->page = page;     int right.sub.-- off(void);                             return(0);     int digit1(void);      }     int digit2(void);      int setpall16(unsigned char far *pall)     int (*toggle.sub.-- top)( );                            {     int (*toggle.sub.-- bottom)( );                             union REGS reg;     int (*toggle.sub.-- right)( );                             struct SREGS sregs;     int (*toggle.sub.-- left)( );                             sregs.es = FP.sub.-- SEG(pall);     int (*kbfunc)( );       reg.x.dx = FP.sub.-- OFF(pall);                             reg.h.ah = 0x10;                             reg.h.al = 2;     unsigned char clrtbl 17!;                             int86x(0x10,&reg,&reg,&sregs);                             return(0);     void beep2( )          }     {                      int draw.sub.-- block(block.sub.-- t blk, u.sub.--                            char fg)      sound(350);           {      delay(100);            u.sub.-- short end,mask,end.sub.-- mask;      nosound( );            u.sub.-- short ybyte = blk.y*screen.sub.--                            params.lbytes;     }                       u.sub.-- short sbyte = ybyte + (blk.x>>3);                             u.sub.-- short ebyte = ybyte + (blk.x+blk.w-1)>>3)                            ;     int setpall(unsigned char far *pall)                             u.sub.-- short bwidth = ebyte - sbyte;     {                       u.sub.-- char left = 8 - (blk.x & 7);/* (data >>                            count)      union REGS reg;       <<8 */      struct SREGS sregs;    u.sub.-- char *sp = (u.sub.-- char                            *)screen*)params.addr +      sregs.es = FP.sub.-- SEG(pall);                            sbyte;      reg.x.dx = FP.sub.-- OFF(pall);                             u.sub.-- short color.sub.-- compare = (fg << 8)                            | 0x02;      reg.h.ah = 0x10;       int ij;      reg.h.al = 0x12;      reg.x.bx = 0;          end = (blk.x + blk.w) & 7;      reg.x.cx = 16;         if(end==0)      int86x(0x10,&reg,&reg,&sregs);                             end.sub.-- mask = 0xff00;      return(0);             else     }                       end.sub.-- mask = 0xff00 << (8-end);     int setbmode(int mode)     {                       outport(0x3ce,0xf07);/* color dont care - we      .sub.-- AL = mode;    care all 4 planes */      asm {                  outport(0x3ce,color.sub.-- compare);       mov ah,0;             outport(0x3ce,0xa05); /* read mode 1,write       int 10h;             mode 2(page 111 PC Video Systems */      }                      outport(0x3ce,0x003); /* rotate, raster op */      return(0);     }                       if(bwidth ==0) {     int getbmode(MODE2 *omode)     {                       for(j=0;j<blk.h;++j) {      unsigned char columns,mode,page;                              mask = (0xff00 >> (blk.x&7)) & 0xff00;                              mask = (mask & end.sub.-- mask) |                            (sp 0!<<8);      asm {                   outport(0x3ce,mask | 0x0008);       sp 0! = fg;            for(i=1; i<bwidth; ++i) {       sp += screen.sub.-- params.lbytes;      }                       /* Next byte */     }                        mask = (0xffff << left) & 0xff00;     else if(bwidth == 1) {   mask |= (sp i!<<8);                              outport(0x3ce,mask | 0x0008);      for(j=0;j<blk.h;++j) {                              sp i! = fg;       /* Firstbyte */       }       mask = (0xff << left) & 0xff00;       mask |= (sp 0!<<8);                             /* Last byte */       outport(0x3ce,mask | 0x0008); /* set plane                             mask = end.sub.-- mask (sp bwidth!<<8);     mask, reg 8, bit map register */                             outport(0x3ce,mask | 0x0008);       sp 0! = fg;                             sp bwidth! = fg;       /* Lastbyte */       mask = end.sub.-- mask (sp 1!<<8);                             sp += screen.sub.-- params.lbytes;       outport(0x3ce,mask | 0x0008); /* set plane                             }     mask reg 8, bit map register */                             }       sp 1! = fg;           outport(0x3ce,0x205); /* read mode 0,write                            mode 2 */       sp += screen.sub.-- params.lbytes;      }                      return(0);     }                      }     else if(bwidth = 2) {      for(j=0;j<blk.h;++j) {                            int digit1(void)                            {       /* First byte */      int retval = 0;       mask = (0xff << left) & 0xff00;       mask = mask | (sp 0!<<8);                             switch ( getch( )) {       outport(0x3ce,mask | 0x0008);       sp 0! = fg;           /* Look for an Escape, q or Q key */                             case ESC:       /* Middle byte */     case CHAR.sub.-- q:       mask = 0xff00 | (sp 1!<<8);                             case CHAR.sub.-- Q:       outport(0x3ce,mask | 0x0008);                             retval = 1; /* done */       sp 1! = fg;           break;       /* Last byte */       case 0:       mask = end.sub.-- mask | (sp 2!<<8);                             kbfunc = digit2;       outport(0x3ce end.sub.-- mask | 0x0008);                             retval = 0;       sp 2! = fg;           break;       sp += screen.sub.-- params.lbytes;                             case 0x38: /* fn 8 */      }                      /* top */     }                       toggle.sub.-- top( );     else {                  retval = 0;      for(j=0;j<blk.h;++j) {                             break;       /* First byte */      case 0x34: /* fn u */       mask = (0xff << left) & 0xff00;                             /* left */       mask |= (sp 0!<<8);                             toggle.sub.-- left( );       outport(0x3ce,mask | 0x0008);                             retval = 0;                             break;       sp 0! = fg;                             case 0x32: /* fn k */       /* bottom */       toggle.sub.-- bottom( );                             draw.sub.-- chars(Cur);       retval = 0;       break;                toggle.sub.-- top = top.sub.-- on;                             toggle.sub.-- left = left.sub.-- on;      case 0x36: /* fn o */  toggle.sub.-- bottom = bottom.sub.-- on;       /* right */           toggle.sub.-- right = right.sub.-- on;       toggle.sub.-- right( );       retval = 0;           break;       break;                             case 0x4d: /* actual right arrow key */                             case 0x44: /* f10 */      default:               /* right */       /* all off*/          toggle.sub.-- right( );       top.sub.-- off( );    retval = 0;       left.sub.-- off( );   break;       bottom.sub.-- off( );       right.sub.-- off( );  case 0x4b: /* actual left arrow key */       retval = 0;           case 0x43: /* f9 */       break;                /* left */      }                      toggle.sub.-- left( );      return(retval);        retval = 0;     }                       break;     int digit2(void)     {                       case 0x50: /* actual down arrow key */      int retval = 0;                             /* Just beep if we attempt to go smaller than      /* Look for an Escape key */                            the smallest */      switch (getch( )) {    if(Cur - 1 <= 0)                             {      /* Look for an Escape, q or Q key */                              beep2( );      case ESC:               break;      case CHAR.sub.-- q:    }      case CHAR.sub.-- Q:       retval = 1; /* done */                             draw.sub.-- rect(0, 0, screen.sub.-- params.w,       break;               screen.sub.-- params.h, BG);     -Cur; 0:       /* Don't think this should ever happen */       retval = 0;           draw.sub.-- chars(Cur);       break;                             toggle.sub.-- top = top.sub.-- on;      case 0x48: /* actual up arrow key */                             toggle.sub.-- left = left.sub.-- on;                             toggle.sub.-- bottom = bottom.sub.-- on;       /* Just beep if we are going bigger than the                             toggle.sub.-- right = right.sub.-- on;     biggest */       if(Cur+1 >= VNUM)     break;       {        beep2( );            case 0x85: /* fl 1 */        break;               /* bottom */       }                     toggle.sub.-- bottom( );                             retval = 0;       draw.sub.-- rect(0, 0, screen.sub.-- params.w,                             break;      screen.sub.-- params.h, BG);                             case0x86: /* f12 */       Cur.sup.++ ;          /* top */       toggle.sub.-- top( );                            {       retval = 0;           draw.sub.-- block(bottom, COLOR.sub.-- INDEX),       break;                toggle.sub.-- bottom = bottom.sub.-- off;                             return(1);      default:              }       top.sub.-- off( ),   int bottom.sub.-- off( )       left.sub.-- off( ),  {       bottom.sub.-- off( ),                             draw.sub.-- block(bottom, WHITE);       right.sub.-- off( ),  toggle.sub.-- bottom = bottom.sub.-- on;       retval = 0;           return(0);       break;               }      }                            int do.sub.-- parameter(char *argv)      /* always go back to other function after second                            {     digit is received */    char cred 4!;      kbfunc = digit1;       char cgreen 4!;                             char cblue 4!;      return(retval);        int error.sub.-- condition = 0;     int top.sub.-- on( )    switch(argv 0!)     {                       {       draw.sub.-- block(top, COLOR.sub.-- INDEX);                             case `w`:       toggle.sub.-- top = top.sub.-- off;                             case `W`:       return(1);              width = (int)atoi(&argv 1!);     }                         if(width <= 0 width >= 480)     int top.sub.-- off( )     {     {                          fprintf(stderr,"illegal value for width,       draw.sub.-- block(top, WHITE);                            %d\n",width);       toggle.sub.-- top = top.sub.-- on;                                error.sub.-- condition = 1;       return(0);              }     }     int left.sub.-- on( )     top.w = width;     {                         top.x = 320 - (width/2);       draw.sub.-- block(left, COLOR.sub.-- INDEX);                               bottom.w = width;       toggle.sub.-- left = left.sub.-- off;                               bottom.x = 320 - (width/2);       return(1);              left.h = width;     }                         left.y = 240 - (width/2);     int left.sub.-- off( )    right.h = width;     {                         right.y = 240 - (width/2);       draw.sub.-- block(left, WHITE);       toggle.sub.-- left = left.sub.-- on;                               break;       return(0);            case `h`;     }                       case `H`:     int right.sub.-- on( )    height = (int)atoi(&argv 1!);     {                         if(height <= 0 ∥ height >= 480)       draw.sub.-- block(right, COLOR.sub.-- INDEX);                               {       toggle.sub.-- right = right.sub.-- off;                                fprintf(stderr,"illegal value for height,       return(1);           %d\n",height);     }                          error.sub.-- condition = 1;     int right.sub.-- off( )                               }     {       draw.sub.-- block(right, WHITE);                               top.h = height;       toggle.sub.-- right = right.sub.-- on;                               top.y = 0;       return(0);              bottom.h = height;     }                         bottom.y = 480 - height;     int bottom.sub.-- on( )                               left.w = height;       mask = (0xff << left) & 0xff00;                              return(0);       mask = mask (sp 0!<<8);                            }       outport(0x3ce,mask | 0x0008); /* set plane                            void draw.sub.-- E(int v, int x0, int y0)     mask, reg 8, bit map register */                            {       sp 0!= fg;            int width = (int)( shapes v!.wd - shapes v!.x1);                             int x1 = x0 + shapes v!.x1;       /* Middle byte */       mask = 0xff00 | (sp 1!<<8);                             draw.sub.-- rect(x0,y0,shapes v!.uw,shapes v!.ht,F                            G);       outport(0x3ce,mask | 0x0008); /* set plane                             draw.sub.-- rect(x1,y0,width,shapes v!.uw,FG);     mask, reg 8, bit map register */       sp 1!= fg;           draw.sub.-- rect(x1,y0+shapes v!.y2,width,shapes v!                            .uw,                            FG);       /* Last byte */       mask = end.sub.-- mask | (sp 2!<<8);                            draw.sub.-- rect(x1,y0+shapes v!.y4,width,shapes v!                            .uw,       outport(0x3ce,end.sub.-- mask | 0x0008); /* set                            FG);     plane mask, reg 8, bit map register */                            }       sp 2! = fg;          void draw.sub.-- F(int v, int x0, int y0)                            {       sp += screen.sub.-- params.lbytes;                             int width = (int)( shapes v!.wd - shapes v!.x1                            );      }                      int x1 = x0 + shapes v!.x1;     }     else {                  draw.sub.-- rect(x0,y0,shapes v!.uw,shapes v!.ht,F                            G);      for(j=0;j<h,++j) {     draw.sub.-- rect(x1,y0,width,shapes v!.uw,FG);                             draw.sub.-- rect(x1,y0+shapes v!.y2,width-       /* First byte */     shapes v!.uw,shapes v!.uw,FG);       mask = (0xff << left) & 0xfff00;                            }       mask | = (sp 0!<<8);       outport(0x3ce,mask | 0x0008); /* set plane                            void draw.sub.-- H(int v, int x0, int y0)     mask, reg 8, bit map register */                            {                             int width = (int)( shapes v!.x4 - shapes v!.x1);       sp 0!= fg;                             draw.sub.-- rect(x0,y0,shapes v!.uw,shapes v!.ht,F                            G);       for(i=1; i<bwidth; ++i) {                             draw.sub.-- rect(x0+shapes v!.x1,                               y0+shapes v!.y2,        /* Next byte */        width,        mask = (0xffff << left) & 0xff00;                               shapes v!.uw,FG);        mask |= (sp i!<<8);        outport(0x3ce,mask | 0x0008); /* set                            draw.sub.-- rect(x0+shapes v!.x4,y0,shapes v!.uw,sh                            apes     plane mask, reg 8, bit map register */                             v!.ht,FG);                            }        sp i! = fg;       }                    void draw.sub.-- L(int v, int x0, int y0)                            {       /* Last byte */       int width = (int)( shapes v!.wd - shapes v!.x1                            );       mask = end.sub.-- mask | (sp bwidth!<<8);       outport(0x3ce,mask | 0x0008); /* set plane                             draw.sub.-- rect(x0,y0,shapes v!.uw,shapes v!.ht,F                            G);     mask, reg 8, bit map register */                            draw.sub.-- rect(x0+shapes v!.x1,y0+shapes v!.y4,wi                            dth,       sp bwidth! = fg;     shapes v!.uw,FG);                            }       sp += screen.sub.-- params.lbytes;       }                    void draw.sub.-- T(int v, int x0, int y0)      }                     {      outport(0x3ce,0x205); /* read mode 0,write                             int unit = (int)(2.0*shapes v!.ut);     mode 2 */                             draw.sub.-- rect(x0,y0,shapes v!.wd,shapes v!.uw,F                            G);       left.x = 0;           u.sub.-- short bwidth = ebyte - sbyte;       right.w = height;     u.sub.-- char left = 8 - (x & 7); /* (data >>                            count) <<8       right.x = 640 - height;                            */                             u.sub.-- char *sp = (u.sub.-- char                            *)screen.sub.-- params.addr +       break;               sbyte;      case `o`:              u.sub.-- short color.sub.-- compare = (fg << 8)                            | 0x02;      case `O`:              int i,j;       offset == (int)atoi(&argv 1!);       if( offset >= 480)    end = (x+w) & 7;       {                     if(end = 0)        fprintf(stderr,"illegal value for offset,                              end.sub.-- mask = 0xff00;     %d\n;",offset);                             else        error.sub.-- condition = 1;                              end.sub.-- mask = 0xff00 << (8-end);       }                             outport(0x3ce,0xff07); /* color dont care - we       break;               care all 4 planes */      case `c`:              outport(0x3ce,color.sub.-- compare);      case `C`:              outport(0x3ce,0xa05); /* read mode 1,write       strncpy(cred,&argv 1!,3);                            mode 2(page 111 PC Video Systems */       cred 3!= `\000`;                             outport(0x3ce,0x003); /* rotate, raster op */       strncpy(cgreen,&argv 4!,3);       cgreen 3! = `\000`;                             if(bwidth == 0) {       strncpy(cblue,&argv 7!,3);       cblue 3! = `\000`;                              for(j=0j<h;++j) {       red = (int)atoi(cred);                              mask = (0xff00 >> (x&7)) & 0xff00;       green = (int)atoi(cgreen);                              mask = (mask & end.sub.-- mask) |                            (sp 0!<<8);       blue = (int)atoi(cblue);                              outport(0x3ce,mask | 0x0008); /* set                            plane       if(red > 255)        mask, reg 8, bit map register */       {                      sp 0!= fg;        fprintf(stderr,"illegal value for red,                              sp += screen.sub.-- params.lbytes;     %d\n",red);   }        error.sub.-- condition = 1;                            }       }                    else if(bwidth == 1) {       if(green >255)       {                     for(j=0;j<h;++j) {        fprintf(stderr,"illegal value for green,     %d\n",green);                              /* First byte */        error.sub.-- condition = 1;                              mask = (0xff << left) & 0xff00;       }                      mask |= (sp 0!<<8);       if(blue > 255)         outport(0x3ce,mask | 0x0008); /* set                            plane       {                    mask, reg 8, bit map register */        fprintf(stderr,"illegal value for blue,                              sp 0! = fg;     %d\n",blue);        error.sub.-- condition = 1;                              /* Last byte */       }                      mask = end.sub.-- mask | (sp 1!<<8);       break;                 outport(0x3ce,mask 0x0008); | 0x0008);                            /* set plane      }                     mask, reg 8, bit map register */      return error.sub.-- condition;                              sp 1! = fg;     }                        sp += screen.sub.--)params.lbytes;     int draw.sub.-- rect(int x, int y, int w, int h, u.sub.-- char                             })     {                      }      u.sub.-- short end,mask end.sub.-- mask;                            else if(bwidth == 2) {      u.sub.-- short ybyte = y*screen.sub.-- params.lbytes;                              for(j=0j<h;++j) {      u.sub.-- short sbyte = ybyte + (x>>3);      u.sub.-- short ebyte = ybyte + ((x+w-1)>>3);                              /* First byte */       draw.sub.-- rect(x0+shapes v!.x2, y0+shapes v!.uw,                             int chars = 5;      shapes v!.uw,          int h = shapes v!.ht;         shapes v!.ht - shapes v!.uw,FG);                             int inc = 2*shapes v!.wd;      }                      int x = (screen.sub.-- params.w/2) -                            (shapes v!.1w/2);      void init.sub.-- shapes(void)                             int y = (screen.sub.-- params.h/2) - (h/2);      {                      int i;       int i,j,chars = 5;    void (*draw.sub.-- func 6!( );       int w;       float width,cx,cy;    draw.sub.-- func 0! = draw.sub.-- E;                             draw.sub.-- func 1! = draw.sub.-- F;       for(i=0;i<VNUM;++i)   draw.sub.-- func 2! = draw.sub.-- H;       {                     draw.sub.-- func 3! = draw.sub.-- L;       width = 4.0*heights i! /5.0;                             draw.sub.-- func 4! = draw.sub.-- T;       cx = width/2.0;       draw.sub.-- func 5! = (void *)0;       cy = heights i!/2.0;       shapes i!.ht = (int) (heights i! + 0.04);                             for(i=0;i<shapes v!.chars;++i)       shapes i!.wd = (int) (width + 0.04);                             {       shapes i!.ut = shapes i!.ht/10.0;                              if(draw.sub.-- func i! = (void *)0)       shapes i!.uw = (int) (2.0 * shapes i!.ut + 0.05                              break;     ); /* round up */       shapes i!.cx = (int) (cx + 0.2);                              draw.sub.-- func i!(v, x, y);       shapes i!.cy = (int) (cy); /* round down */                              x += inc;       shapes i!.x1 = (int) ( shapes i!.ut * 2.0);                             }       shapes i!.x2 = (int) ( shapes i!.cx -                            }     (shapes i!.uw/2));     void main(int argc,char **argv)       shapes i!.x3 = (int) (shapes i!.cx +                            {     (shapes i!.uw/2));      char tmp 64!;       shapes i!.x4 = (int) (width - (shapes i!.ut * 2.0)                             int k;     );                      int i;       shapes i!.y1 = (int) ( shapes i!.ut * 2.0);                             int error = 0;       shapes i!.y2 = (int) ( shapes i!.cy -     ((shapes i!.uw+1)/2) );                             for(i=0;argv i!;++i)       shapes i!.y3 = (int) (shapes i!.cy +                             {     (shapes i!.uw/2));       if(argv i! 0!==`-`∥ argv i! 0!==`/`)       shapes i!.y4 = (int) ( shapes i! .ht - shapes i!.uw                              {     );                       error += do.sub.-- parameter(&argv i! 1!);                              }       /* Determine how many chars can fit on the                             }     screen */               if(error)       for(j=chars; j>0,; --j)                              exit(0);       {        w =j*shapes i!.wd + (j - 1)*shapes i!.wd;                            #if 0                             printf("width = %d height = %d offset = %d red        if( w < screen.sub.-- params.w -                            = %d green = %d blue = %d\n",     (screen.sub.-- params.w/8))                               width,height,offset,red,green,blue);        {                   #endif        shapes i!.chars = j;        shapes i!.lw = w;    getbmode(&mode);        break;        }                    rgb 0!.red = 63; rgb 0!.green = 63; rgb 0!.blue       }                    = 63; /*  0!white */      }                      rgb 1!.red = 0; rgb 1!.green = 0; rgb 1!.blue =     }                      0;/*  1! black*/     void draw.sub.-- chars( int v)                             rgb 2!.red = (unsigned char)(red/4);     {                       rgb 2!.green = (unsigned char)(green/4);     rgb 2!.blue = (unsigned char)(blue/4);     for(k=3 ;k<16;++k) {      rgb k!.red = 0;      rgb k!.green = 0;      rgb k!.blue = 0;     }     clrtbl 0! = 0;     clrtbl 1! = 1;     clrtbl 2! = 2;     clrtbl 3! = 3;     clrtbl 4! = 4;     clrtbl 5! = 5;     clrtbl 6! = 6;     clrtbl 7! = 7;     clrtbl 8! = 8;     clrtbl 9! = 9;     clrtbl 10! = 10;     clrtbl 11! = 11;     clrtbl 12! = 12;     clrtbl 13! = 13;     clrtbl 14! = 14;     clrtbl 15! = 15;     clrtbl 16! = 1; /* overscan black */     top.y += offset;     bottom.y -= offset;     left.x += offset;     right.x -= offset;     setbmode(screen.sub.-- params.mode);     setpall((unsigned char far *)rgb);     setpall 6(clrtbl);     init.sub.-- shapes( );     kbfunc = digit1;     toggle.sub.-- top = top.sub.-- on;     toggle.sub.-- left = left.sub.-- on;     toggle.sub.-- bottom = bottom.sub.-- on;     toggle.sub.-- right = right.sub.-- on;     draw.sub.-- chars(Cur);     while(1) {      if(kbhito) ( )){       if( kbfunc( ))       break;      }      }      setbmode(mode.mode);     }     __________________________________________________________________________ 

I claim:
 1. An apparatus for communicating to and vision testing of a deaf or severely hearing-impaired examinee by an examiner comprising:a) a display device for displaying visual acuity testing targets; b) a plurality of indicator lights compromising individually energizable light-emitting means juxtaposed along a parallel line of sight of said examinee as said display device and equidistant from the examinee as said display device; c) means for selectively controlling activation of each said light-emitting means to indicate messages for communicating to said examinee from the examiner.
 2. Apparatus as in claim 1 wherein said display device for displaying visual acuity testing targets includes means for reflecting light projected from a visual acuity target projector.
 3. Apparatus as in claim 1 wherein said display device for displaying visual acuity testing targets includes a device having a surface imprinted with said visual acuity testing targets.
 4. Apparatus as in claim 1 wherein said display device for displaying visual acuity testing targets includes:a) said targets imprinted upon a panel of translucent material; b) means for illuminating said panel from the rear to permit viewing of said targets from the front.
 5. Apparatus as in claim 1 wherein said indicator lights comprising individually energizable light emitting means emit identical wavelength light.
 6. Apparatus as in claim 1 wherein said indicator lights comprising individually energizable light emitting means emit light having a plurality of wavelengths.
 7. Apparatus as in claim 1 wherein said display device for displaying visual acuity targets includes:a) an electronic display; b) an electronic memory and processor connected to said display device having means to generate visual acuity targets on said display device; c) means connected to said memory and processor to control the presentation of the targets.
 8. Apparatus as in claim 7 further comprising:a) said electronic memory and processor containing means to generate said indicator lights on said electronic display; b) means connected to said memory and processor to selectively activate said indicator lights.
 9. A method for communicating from an examiner to a deaf or severely hearing-impaired examinee during a vision examination comprising the steps of:a) selectively activating a plurality of indicator lights comprising individually energizable light-emitting means juxtaposed adjacent to a display of visual acuity test targets for the purpose of communicating messages to said examinee from said examiner; b) simultaneously operating a refractor positioned in front of said examinee, said refractor comprising lenses and instruments for determining a current visual state of said examinee. 